package com.hanhanxiaochong.zhongxiangchuanmei.widget;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

import com.hanhanxiaochong.zhongxiangchuanmei.R;
import com.jakewharton.rxbinding.view.RxView;

import java.util.concurrent.TimeUnit;

import rx.android.schedulers.AndroidSchedulers;


/**
 * 自定义组件：购买数量，带减少增加按钮
 * Created by hiwhitley on 2016/7/4.
 */
public class ShoppingcartAmountView extends LinearLayout implements TextWatcher {

    private int amount = 1; //购买数量
    private int goods_storage = Integer.MAX_VALUE; //商品库存

    private BtnClickListener mListener;
    private EtFocusChangeListener focusChangeListener;

    private EditText etAmount;

    public ShoppingcartAmountView(Context context) {
        this(context, null);
    }

    @SuppressLint("CheckResult")
    public ShoppingcartAmountView(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater.from(context).inflate(R.layout.view_amount, this);
        etAmount = findViewById(R.id.etAmount);
        Button btnDecrease = findViewById(R.id.btnDecrease);
        Button btnIncrease = findViewById(R.id.btnIncrease);
        etAmount.addTextChangedListener(this);

        TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attrs, R.styleable.ShoppingcartAmountView);
        int btnWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.ShoppingcartAmountView_AmountViewButtonWidth, LayoutParams.WRAP_CONTENT);
        int tvWidth = obtainStyledAttributes.getDimensionPixelSize(R.styleable.ShoppingcartAmountView_midTvWidth, 80);
        int tvTextSize = obtainStyledAttributes.getDimensionPixelSize(R.styleable.ShoppingcartAmountView_midTvTextSize, 0);
        int btnTextSize = obtainStyledAttributes.getDimensionPixelSize(R.styleable.ShoppingcartAmountView_AmountViewButtonTextSize, 0);
        obtainStyledAttributes.recycle();

        LayoutParams btnParams = new LayoutParams(btnWidth, LayoutParams.MATCH_PARENT);
        btnDecrease.setLayoutParams(btnParams);
        btnIncrease.setLayoutParams(btnParams);
        if (btnTextSize != 0) {
            btnDecrease.setTextSize(TypedValue.COMPLEX_UNIT_PX, btnTextSize);
            btnIncrease.setTextSize(TypedValue.COMPLEX_UNIT_PX, btnTextSize);
        }

        LayoutParams textParams = new LayoutParams(tvWidth, LayoutParams.MATCH_PARENT);
        etAmount.setLayoutParams(textParams);
        if (tvTextSize != 0) {
            etAmount.setTextSize(tvTextSize);
        }

        etAmount.setOnFocusChangeListener((v, hasFocus) -> {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//                if (focusChangeListener != null) {
//                    focusChangeListener.onFocusChange(hasFocus);
//                }
            }
        });

        //点击减少商品数量
        RxView.clicks(btnDecrease)
                .throttleWithTimeout(50, TimeUnit.MICROSECONDS)
                .subscribeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(o -> {
                    if (amount > 1) {
                        mListener.onBtnClickDecrease(etAmount, amount);
                    }
                });
        //点击增加商品数量
        RxView.clicks(btnIncrease)
                .throttleWithTimeout(50, TimeUnit.MICROSECONDS)
                .subscribeOn(AndroidSchedulers.mainThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(o -> {
                    if (amount < goods_storage) {
                        mListener.onBtnClickPlus(etAmount, amount);
                    }
                });
    }

    public void setOnBtnClickListener(BtnClickListener btnClickListener) {
        this.mListener = btnClickListener;
    }

    public void setOnFocusChangeListener(EtFocusChangeListener etFocusChangeListener) {
        this.focusChangeListener = etFocusChangeListener;
    }

    public void setGoods_storage(int goods_storage) {
        this.goods_storage = goods_storage;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void afterTextChanged(Editable s) {
        if (s.toString().isEmpty())
            return;
        amount = Integer.valueOf(s.toString());
    }

    public interface BtnClickListener {

        void onBtnClickPlus(View view, int amount);

        void onBtnClickDecrease(View view, int amount);

    }

    public interface EtFocusChangeListener {

        void onFocusChange(boolean hasFocus);

    }

    public void setNum(int num) {
        etAmount.setText(String.valueOf(num));
    }

    public String getAmount() {
        return etAmount.getText().toString();
    }
}
